package ru.kreda.webapp.client.place;

import ru.kreda.webapp.client.ErrorHandler;

import com.google.gwt.place.shared.PlaceTokenizer;

/**
 * Вспомогательный класс для преобразований URL token <-> Place.
 */
public abstract class AbstractPlaceTokenizer<T extends AbstractPlace> implements PlaceTokenizer<T> {

	/**
	 * Создает конкретный place.
	 * 
	 * @param parts
	 *            разделенные из токена параметры в виде строк
	 * @throws Exception
	 *             в случае невозможности создания place из предоставленных
	 *             параметров
	 */
	protected abstract T createPlace(String[] parts) throws Exception;

	@Override
	public T getPlace(String token) {
		String[] t = AbstractPlace.parseToken(token);
		T place = null;
		try {
			place = createPlace(t);
		} catch (Exception e) {
			ErrorHandler.handle(e);
		}
		return place;
	}

	@Override
	public String getToken(T place) {
		return place.getToken();
	}

}